package com.yd.tool;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 正则验证 符合返回true
 * 
 * @author shangruihua
 * 
 */
public class UtsReg {
	/**
	 * 是否是数字 length<12
	 * 
	 * @param str
	 * @return
	 */
	public static boolean getInt(String str) {
		if(null==str){
			return false;
		}
		if (str.trim().length() > 12) {
			return false;
		}
		String reg = "^-?\\d+$";
		return str.trim().matches(reg);
	}
	/**
	 * 下拉选择
	 * 
	 * @param str
	 * @return
	 */
	public static boolean getIntXl(String str) {
		if(null==str){
			return false;
		}
		if (str.trim().length() > 12) {
			return false;
		}
		if("0".equals(str.trim())){
			return false;
		}
		String reg = "^-?\\d+$";
		return str.trim().matches(reg);
	}

	/**
	 * 是否是数字算上double带点也可以 length<18
	 * 
	 * @param str
	 * @return
	 */
	public static boolean getDouble(String str) {
		if(null==str){
			return false;
		}
		if (str.trim().length() > 18) {
			return false;
		}
		String reg = "^\\d+(\\.\\d+)?$";
		return str.trim().matches(reg);
	}

	/**
	 * email
	 * 
	 * @param str
	 * @return
	 */
	public static boolean getStringEmail(String str) {
		if(null==str){
			return false;
		}
		if (str.trim().length() > 10000) {
			return false;
		}
		String reg = "^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$";
		return str.trim().matches(reg);
	}

	/**
	 * url
	 * 
	 * @param str
	 * @return
	 */
	public static boolean getStringUrl(String str) {
		if(null==str){
			return false;
		}
		if (str.trim().length() > 10000) {
			return false;
		}
		String reg = "^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$";
		return str.trim().matches(reg);
	}

	/**
	 * 2-5汉字
	 * 
	 * @param str
	 * @return
	 */
	public static boolean getStringZname(String str) {
		if(null==str){
			return false;
		}
		if (str.trim().length() > 10000) {
			return false;
		}
		String reg = "^[\\u4E00-\\u9FA5]{2,5}$";
		return str.trim().matches(reg);
	}

	/**
	 * 1汉字 男女
	 * 
	 * @param str
	 * @return
	 */
	public static boolean getSex(String str) {
		if(null==str){
			return false;
		}
		if (str.trim().length() > 10000) {
			return false;
		}
		String reg = "^[\\u4E00-\\u9FA5]{1}$";
		return str.trim().matches(reg);
	}

	/**
	 * 由数字、26个英文字母或者下划线组成的字符串
	 * 
	 * @param str
	 * @return
	 */
	public static boolean getStringPass(String str) {
		if(null==str){
			return false;
		}
		if (str.trim().length() > 10000) {
			return false;
		}
		if (str.trim().length() > 36) {
			return false;
		}
		String reg = "^\\w+$";
		return str.trim().matches(reg);
	}
	
	/**
	 * >1 length<222222222
	 * 
	 * @param str
	 * @return
	 */
	public static boolean getStringInfo(String str) {
		if(null==str){
			return false;
		}
		if (str.trim().length() > 222222222) {
			return false;
		}
		return true;
	}

	/**
	 * 只含有汉字、数字、字母、下划线，下划线位置不限
	 * 
	 * @param str
	 * @return
	 */
	public static boolean getStringKB(String str) {
		if(null==str){
			return false;
		}
		if (str.trim().length() > 512) {
			return false;
		}
		String reg = "^([a-zA-Z0-9\\s?_\\u4e00-\\u9fa5]|[-]|[-]|[,]|[，]|[.]|[。]|[%]|[%]|[?]|[？]|[:]|[：]|[!]|[！]|[~]|[～]|[\"]|[“])+$";
		return str.trim().matches(reg);
	}

	/**
	 * 只含有汉字、数字、字母、下划线，下划线位置不限
	 * 
	 * @param str
	 * @return
	 */
	public static boolean getStringMB(String str) {
		if(null==str){
			return false;
		}
		if (str.trim().length() > 1024) {
			return false;
		}
		String reg = "^([a-zA-Z0-9\\s?_\\u4e00-\\u9fa5]|[-]|[-]|[,]|[，]|[.]|[。]|[%]|[%]|[?]|[？]|[:]|[：]|[!]|[！]|[~]|[～]|[\"]|[“])+$";
		return str.trim().matches(reg);
	}
	/**
	 * 只含有汉字、数字、字母、下划线，下划线位置不限
	 * 
	 * @param str
	 * @return
	 */
	public static boolean getStringGB(String str) {
		if(null==str){
			return false;
		}
		if (str.trim().length() > 1024000) {
			return false;
		}
		String reg = "^([a-zA-Z0-9\\s?_\\u4e00-\\u9fa5]|[-]|[-]|[,]|[，]|[.]|[。]|[%]|[%]|[?]|[？]|[:]|[：]|[!]|[！]|[~]|[～]|[\"]|[“])+$";
		return str.trim().matches(reg);
	}
	
	/**
	 * 只含有汉字、数字、字母、下划线，下划线位置不限 可以有-
	 * 
	 * @param str
	 * @return
	 */
	public static boolean getStringFanWei(String str) {
		if(null==str){
			return false;
		}
		if (str.trim().length() > 512) {
			return false;
		}
		String reg = "^([a-zA-Z0-9\\s?_\\u4e00-\\u9fa5]|[-]|[-]|[,]|[，]|[.]|[。]|[%]|[%]|[?]|[？]|[:]|[：]|[!]|[！]|[~]|[～]|[\"]|[“])+$";
		return str.trim().matches(reg);
	}
	
	/**
	 * 只含有汉字、数字、字母、下划线，下划线位置不限
	 * 
	 * @param str
	 * @return
	 */
	public static boolean getStringTitle(String str) {
		return getStringKB(str);
	}
	
	/**
	 * 只含有汉字、数字、字母、下划线，下划线位置不限
	 * 
	 * @param str
	 * @return
	 */
	public static boolean getStringDoc(String str) {
		return getStringMB(str);
	}

	/**
	 * 验证手机
	 * 
	 * @param str
	 * @return
	 */
	public static boolean getIsPhone(String str) {
		if(null==str){
			return false;
		}
		if (str.trim().length() > 10000) {
			return false;
		}
		String reg = "^1[0-9]{10}$";
		return str.trim().matches(reg);
	}
	
	/**
	 * 验证是否是long类型
	 * 
	 * @param str
	 * @return
	 */
	public static boolean getIsLong(String str) {
		if(null==str){
			return false;
		}
		try{
	       Long.parseLong(str);
	       return true;
	   }catch(NumberFormatException e){
		   return false;
	   }
	}
	
	/**
	 * //日期+时间的正则表达式 alert("时间格式不正确,正确格式为: 2014-01-01 12:00:00 ");
	 * 
	 * @param str
	 * @return
	 */
	public static boolean getIsRqsj(String str) {
		if(null==str){
			return false;
		}
		if (str.trim().length() > 10000) {
			return false;
		}
		String reg = "^[1-9]\\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\\s+(20|21|22|23|[0-1]\\d):[0-5]\\d:[0-5]\\d$";
		String reg2 = "^[1-9]\\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$";
		String reg3 = "(20|21|22|23|[0-1]\\d):[0-5]\\d:[0-5]\\d$";
		String reg4 = "(20|21|22|23|[0-1]\\d):[0-5]\\d$";
		return str.trim().matches(reg)||str.trim().matches(reg2)||str.trim().matches(reg3)||str.trim().matches(reg4);
	}

	/**
	 * 前端日期 格式 201609170501 2016年9月17日5点1分
	 * 
	 * @param str
	 * @return
	 */
	public static boolean getIsRq(String str) {
		if(null==str){
			return false;
		}
		if (str.trim().length() != 12) {
			return false;
		}
		if (str.trim().length() > 10000) {
			return false;
		}
		String reg = "^-?\\d+$";
		if (str.trim().matches(reg)) {
			if (Integer.valueOf(str.trim().substring(8, 10)) > 24) {
				return false;
			}
			if (Integer.valueOf(str.trim().substring(10, 12)) > 59) {
				return false;
			} else {
				return true;
			}

		} else {
			return false;
		}
	}

	/**
	 * 把带html的标签去掉
	 * 
	 * @param htmlStr
	 *            带html标签的字符串
	 * @return 纯字符串
	 */
	public static String delHTMLTag(String htmlStr) {
		if (htmlStr.trim().length() > 222222222) {
			return "";
		}
		String regEx_script = "<script[^>]*?>[//s//S]*?<///script>"; // 定义script的正则表达式
		String regEx_style = "<style[^>]*?>[//s//S]*?<///style>"; // 定义style的正则表达式
		String regEx_html = "<[^>]+>"; // 定义HTML标签的正则表达式
		Pattern p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE);
		Matcher m_script = p_script.matcher(htmlStr);
		htmlStr = m_script.replaceAll(""); // 过滤script标签
		Pattern p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE);
		Matcher m_style = p_style.matcher(htmlStr);
		htmlStr = m_style.replaceAll(""); // 过滤style标签
		Pattern p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE);
		Matcher m_html = p_html.matcher(htmlStr);
		htmlStr = m_html.replaceAll(""); // 过滤html标签
		return htmlStr.trim(); // 返回文本字符串
	}

}

/*
 * 电话号码正则表达式（支持手机号码，3-4位区号，7-8位直播号码，1－4位分机号）
 * ((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-
 * (\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\
 * d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$)
 * 
 * 匹配格式： 11位手机号码 3-4位区号，7-8位直播号码，1－4位分机号 如：12345678901、1234-12345678-1234
 * 
 * 
 * "^\d+$"　　//非负整数（正整数 + 0） "^[0-9]*[1-9][0-9]*$"　　//正整数
 * "^((-\d+)|(0+))$"　　//非正整数（负整数 + 0） "^-[0-9]*[1-9][0-9]*$"　　//负整数
 * "^-?\d+$"　　　　//整数 "^\d+(\.\d+)?$"　　//非负浮点数（正浮点数 + 0）
 * "^(([0-9]+\.[0-9]*[1-9][0
 * -9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"　　//正浮点数
 * "^((-\d+(\.\d+)?)|(0+(\.0+)?))$"　　//非正浮点数（负浮点数 + 0）
 * "^(-(([0-9]+\.[0-9]*[1-9][
 * 0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"　　//负浮点 数
 * "^(-?\d+)(\.\d+)?$"　　//浮点数 "^[A-Za-z]+$"　　//由26个英文字母组成的字符串
 * "^[A-Z]+$"　　//由26个英文字母的大写组成的字符串 "^[a-z]+$"　　//由26个英文字母的小写组成的字符串
 * "^[A-Za-z0-9]+$"　　//由数字和26个英文字母组成的字符串 "^\w+$"　　//由数字、26个英文字母或者下划线组成的字符串
 * "^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"　　　　//email地址
 * "^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"　　//url
 * /^13\d{9}$/gi手机号正则表达式
 * 
 * 
 * public static bool IsValidMobileNo(string MobileNo) { const string regPattern
 * = @"^(130|131|132|133|134|135|136|137|138|139)\d{8}$"; return
 * Regex.IsMatch(MobileNo, regPattern); }
 * 
 * 
 * 正则表达式--验证手机号码:13[0-9]{9} 实现手机号前带86或是+86的情况:^((\+86)|(86))?(13)\d{9}$
 * 电话号码与手机号码同时验证:(^(\d{3,4}-)?\d{7,8})$|(13[0-9]{9})
 * 提取信息中的网络链接:(h|H)(r|R)(e|E)(f|F) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?
 * 提取信息中的邮件地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
 * 提取信息中的图片链接:(s|S)(r|R)(c|C) *= *('|")?(\w|\\|\/|\.)+('|"| *|>)?
 * 提取信息中的IP地址:(\d+)\.(\d+)\.(\d+)\.(\d+) 提取信息中的中国手机号码:(86)*0*13\d{9}
 * 提取信息中的中国固定电话号码:(\(\d{3,4}\)|\d{3,4}-|\s)?\d{8}
 * 提取信息中的中国电话号码（包括移动和固定电话）:(\(\d{3,4}\)|\d{3,4}-|\s)?\d{7,14}
 * 提取信息中的中国邮政编码:[1-9]{1}(\d+){5} 提取信息中的中国身份证号码:\d{18}|\d{15} 提取信息中的整数：\d+
 * 提取信息中的浮点数（即小数）：(-?\d*)\.?\d+ 提取信息中的任何数字 ：(-?\d*)(\.\d+)?
 * 提取信息中的中文字符串：[\u4e00-\u9fa5]* 提取信息中的双字节字符串 (汉字)：[^\x00-\xff]*
 */
